home *** CD-ROM | disk | FTP | other *** search
/ Total Web Page (Professional Suite) / Total Web Page 99.iso / CGI / URLCHK.C < prev    next >
Text File  |  1996-06-03  |  3KB  |  172 lines

  1.  
  2. /*
  3.  *
  4.  * Probe's multiple link eliminator for Matt's free for all links page
  5.  * Version 1.0
  6.  * Usama Wazeer (usamaw@cs.utexas.edu)
  7.  * URL: http://www.cs.utexas.edu/users/usamaw
  8.  *
  9.  * #  Define the Output and Input files below..
  10.  *    DONT define the same file for both this will
  11.  *    delete your file and you will lose all data.
  12.  * #  Compile this using your favorite C compiler..
  13.  *    ex: gcc -o urlchk urlchk.c
  14.  * #  and then just run: urlchk
  15.  *
  16.  * The program will display the line number and entry for each
  17.  * link that is repeated and create the output file.
  18.  *
  19.  * Feel free to copy or change this program in any way,
  20.  * as long as you give me credit. :)
  21.  *
  22.  */
  23.  
  24. /******** DEFINE THESE TWO VARIABLES ********/
  25.  
  26. #define INPUT_FILE "/u/usamaw/www/links.html"
  27. #define OUTPUT_FILE "/u/usamaw/www/links.html.out"
  28.  
  29. /********************************************/
  30.  
  31. #include <stdio.h>
  32. #include <string.h>
  33.  
  34. typedef struct URLType
  35. {
  36.   char url[150];
  37.   struct URLType *next;
  38. } URLStruct;
  39.  
  40. URLStruct *URLList;
  41.  
  42. #ifndef NULL
  43. #define NULL(type) (type)0;
  44. #endif
  45.  
  46. URLStruct *init_urllist( void )
  47. {
  48.   URLStruct *l_list;
  49.   l_list = (URLStruct *) malloc (sizeof(l_list));
  50.   l_list = NULL;
  51.   return (l_list);
  52. }
  53.  
  54. URLStruct *find_url(char *userhost)
  55. {
  56.   URLStruct *User;
  57.  
  58.   if (!userhost)
  59.     return NULL;
  60.  
  61.   for( User = URLList; User; User = User->next )
  62.     if( !strcasecmp( User->url, userhost ) )
  63.       return(User);
  64.   return(NULL);
  65. }
  66.  
  67. int  readln_from_a_file( FILE *stream, char *lin)
  68. {
  69.         char *p;
  70.  
  71.         do
  72.                 p = fgets( lin, 1000, stream );
  73.         while( ( p != NULL ) && ( *lin == '#') );
  74.  
  75.         if( p == NULL )
  76.                 return( 0 );
  77.         if (strchr(lin, '\n'))
  78.           *strchr(lin, '\n') = '\0';
  79.         if (strchr(lin, '\r'))
  80.           *strchr(lin, '\r') = '\0';
  81.         return( 1 );
  82. }
  83.  
  84. char *furl( char *userhost )
  85. {
  86.   URLStruct   *dummy;
  87.  
  88.   if( (dummy = find_url(userhost)) != NULL )
  89.     return (dummy->url);
  90.   return(NULL);
  91. }
  92.  
  93. int add_to_urllist( char *url)
  94. {
  95.   URLStruct *New_user;
  96.   char buffer[200];
  97.  
  98.   if( (New_user = find_url(url)) != NULL )
  99.     return 0;
  100.   if( (New_user = (URLStruct *) malloc (sizeof(*New_user))) == NULL)
  101.     return 0;
  102.  
  103.   strcpy(New_user->url, url);
  104.   New_user->next = URLList;
  105.   URLList = New_user;
  106.   return 1;
  107. }
  108.  
  109. int checkurl(char *url2)
  110. {
  111.     char  *url;
  112.     url = strtok(url2, ">");
  113.  
  114.     if(furl(url))
  115.       return 0;
  116.     else
  117.       {
  118.         add_to_urllist(url);
  119.         return 1;
  120.       }
  121.   }
  122. int  read_urllist( char *filename, char *filename2 )
  123. {
  124.   FILE  *fp;
  125.   int i = 0;
  126.   char  lin[2000];
  127.   char  url2[200];
  128.   char  rest[2000];
  129.   URLStruct *dummy;
  130.   FILE *list_file;
  131.  
  132.   if( ( fp = fopen( filename, "r" ) ) == NULL )
  133.     return 0;
  134.  
  135.   if( ( list_file = fopen( filename2, "w" ) ) == NULL )
  136.     return 0;
  137.  
  138.   for( dummy = URLList; dummy; dummy = dummy->next )
  139.     free(dummy);
  140.  
  141.   URLList = init_urllist();
  142.  
  143.   while( readln_from_a_file( fp, lin) )
  144.     {
  145.       i++;
  146.       strcpy(url2, "");
  147.       sscanf(lin, "<li><a href=%s %s</a>\n", url2, rest);
  148.       if(!*url2)
  149.           fprintf( list_file, "%s\n", lin);
  150.       else
  151.         {
  152.           if(checkurl(url2))
  153.             fprintf( list_file, "%s\n", lin);
  154.           else
  155.             printf("%-4i Entry: %s \n", i, lin);
  156.         }
  157.     }
  158.   fclose( fp );
  159.   fclose( list_file );
  160.   return( 1 );
  161. }
  162.  
  163. int main()
  164. {
  165.   printf("Here we go.... \n\n");
  166.   read_urllist(INPUT_FILE, OUTPUT_FILE);
  167.   printf("\n\nAll done!!!!!\n");
  168. }
  169.  
  170.  
  171.  
  172.